package logic

import (
	"cld-quick-cli/dao"
	"cld-quick-cli/database/models"
	"cld-quick-cli/pkg"
	"cld-quick-cli/router/parameters"
	"errors"
	"go.uber.org/zap"
)

func SignupLogic(u *parameters.SignUpNewUser) (err error) {
	//1.调用dao层 查询是否有用户 已经存在那么就返回 error ~
	err = dao.CheckUserExist(u.Username)
	if err != nil {
		zap.L().Error(err.Error())
		return err
	}
	//2.不存在那么就生成 snowID 执行插入的逻辑 ~
	sId := pkg.GenSnowflakeID()
	//3.执行创建用户
	err = dao.InsertUser(sId, u)
	if err != nil {
		zap.L().Error(err.Error())
		return errors.New("用户注册失败！")
	}
	return nil
}

// SignInLogic  登录处理
func SignInLogic(u *parameters.SignInUser) (user *models.UserModel, token string, err error) {
	// 1. 根据用户账户和密码验证是否正确！
	user, err = dao.CheckUsernamePassword(u.Username, u.Password)
	if err != nil {
		zap.L().Error(err.Error())
		return nil, "", errors.New("登录失败！用户名密码错误！")
	}
	token, err = pkg.GenToken(u.Username, user.UserId)
	if err != nil {
		zap.L().Error(err.Error())
		return nil, "", errors.New("登录失败！用户名密码错误！")
	}
	if err != nil {
		zap.L().Error(err.Error())
		return nil, "", errors.New("登录失败！用户名密码错误！")
	}
	return
}

// GetAllUserProfileLogic USER_ID获取用户全部信息！
func GetAllUserProfileLogic(userId string) (*models.UserModel, error) {
	return dao.GetUserInfo(userId)
}
